import request from './index'

// 用户登录请求参数
export interface LoginParams {
  email: string
  password: string
}

// 用户注册请求参数
export interface RegisterParams {
  email: string
  password: string
  nickname: string
  verifyCode: string
}

// 用户信息
export interface UserInfo {
  id: number
  email: string
  nickname: string
  avatar?: string
  totalStorage: number
  usedStorage: number
  status: number
  createTime: string
  updateTime: string
}

// 登录响应
export interface LoginResponse {
  token: string
  user: UserInfo
}

/**
 * 用户登录
 * @param params 登录参数
 * @returns 登录响应
 */
export const login = (params: LoginParams): Promise<LoginResponse> => {
  return request.post('/user/login', params)
}

/**
 * 用户注册
 * @param params 注册参数
 * @returns 注册响应
 */
export const register = (params: RegisterParams): Promise<any> => {
  return request.post('/user/register', params)
}

/**
 * 发送验证码
 * @param email 邮箱地址
 * @param type 验证码类型：register-注册，login-登录，reset-重置密码
 * @returns 发送结果
 */
export const sendVerifyCode = (email: string, type: string = 'register'): Promise<any> => {
  return request.post('/user/send-verify-code', { email, type })
}

/**
 * 获取用户信息
 * @returns 用户信息
 */
export const getUserInfo = (): Promise<UserInfo> => {
  return request.get('/user/info')
}

/**
 * 退出登录
 * @returns 退出结果
 */
export const logout = (): Promise<any> => {
  return request.post('/user/logout')
}

// 用户信息更新参数
export interface UpdateUserParams {
  nickname?: string
  avatar?: string
}

// 密码修改参数
export interface ChangePasswordParams {
  oldPassword: string
  newPassword: string
}

/**
 * 更新用户信息
 * @param params 更新参数 - 接口路径：POST /api/user/update，参数：nickname,avatar
 * @returns 更新后的用户信息
 */
export const updateUserInfo = (params: UpdateUserParams): Promise<UserInfo> => {
  return request.post('/user/update', null, { params })
}

/**
 * 修改密码
 * @param params 密码修改参数 - 接口路径：POST /api/user/change-password，参数：oldPassword,newPassword
 * @returns 修改结果
 */
export const changePassword = (params: ChangePasswordParams): Promise<any> => {
  return request.post('/user/change-password', null, { params })
}